package com.ruoyi.utils;
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;


/**
 * @author : LeiMingkun
 * @date : 2024-10-23 10:15
 * @description : HttpClientUtils
 **/
public class HttpClientUtils {

        static final  int TIMEOUT_MSEC = 5 * 1000;

        /**
         * 发送GET方式请求
         * @param url
         * @param paramMap
         * @return
         */
        public static String doGet(String url, Map<String,String> paramMap){
            // 创建Httpclient对象
            CloseableHttpClient httpClient = HttpClients.createDefault();

            String result = "";
            CloseableHttpResponse response = null;

            try{
                URIBuilder builder = new URIBuilder(url);
                if(paramMap != null){
                    for (String key : paramMap.keySet()) {
                        builder.addParameter(key,paramMap.get(key));
                    }
                }
                URI uri = builder.build();

                //创建GET请求
                HttpGet httpGet = new HttpGet(uri);

                //发送请求
                response = httpClient.execute(httpGet);

                //判断响应状态
                if(response.getStatusLine().getStatusCode() == 200){
                    result = EntityUtils.toString(response.getEntity(),"UTF-8");
                }
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                try {
                    response.close();
                    httpClient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            return result;
        }

        /**
         * 发送POST方式请求
         * @param url
         * @param paramMap
         * @return
         * @throws IOException
         */
        public static String doPost(String url, Map<String, String> paramMap) throws IOException {
            // 创建Httpclient对象
            CloseableHttpClient httpClient = HttpClients.createDefault();
            CloseableHttpResponse response = null;
            String resultString = "";

            try {
                // 创建Http Post请求
                HttpPost httpPost = new HttpPost(url);

                // 创建参数列表
                if (paramMap != null) {
                    List<NameValuePair> paramList = new ArrayList();
                    for (Map.Entry<String, String> param : paramMap.entrySet()) {
                        paramList.add(new BasicNameValuePair(param.getKey(), param.getValue()));
                    }
                    // 模拟表单
                    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);
                    httpPost.setEntity(entity);
                }

                httpPost.setConfig(builderRequestConfig());

                // 执行http请求
                response = httpClient.execute(httpPost);

                resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
            } catch (Exception e) {
                throw e;
            } finally {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            return resultString;
        }

        private static RequestConfig builderRequestConfig() {
            return RequestConfig.custom()
                    .setConnectTimeout(TIMEOUT_MSEC)
                    .setConnectionRequestTimeout(TIMEOUT_MSEC)
                    .setSocketTimeout(TIMEOUT_MSEC).build();
        }
}